<!DOCTYPE html>
<html lang="zh-cn">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
	<title>产品1</title>

	<link href="__ROOT__/static/css/bootstrap.min.css" rel="stylesheet" />
	<style>
		.caidan a:link {
			color: gray;
			text-decoration: none
		}

		/* 未访问链接 */

		.caidan a:visited {
			color: blue;
			text-decoration: none
		}

		/* 已访问链接 */

		.caidan a:hover {
			color: blue;
			text-decoration: none
		}

		/* 用户鼠标悬停 */

		.caidan a:active {
			color: blue;
			text-decoration: none
		}

		/* 激活链接 */
	</style>

</head>

<body>

<pre>
    /**
    * 设置
    */
    public $token = 'hjkhjk';
    // http://2.mswl.applinzi.com/t3f3/Wx.php/Home/Lianjie/index 原案例
    // http://www.hyhthjk.com.cn/note.php/wx/Indexof/checkSignature 现地址

    /***
     * 接收微信传来的消息
     */
    public function getmess(){
        $signature = input('get.signature');   
        $timestamp = input('get.timestamp');
        $nonce = input('get.nonce');
       
        $echostr = input('get.echostr');
        if(!isset($echostr)){
            // 没传echostr 
            $this-&gt;receive();
    
        }else{
            //传echostr 要验证
            $this-&gt;checkSignature($signature,$timestamp,$nonce, $echostr);
        }

    }


    /**
     * 验证接口权限
     * 微信传来signature nonce timestamp echostr
     * 验证成功返回给微信echostr
     */
    public function checkSignature($signature,$timestamp,$nonce, $echostr)
    {
   
        $token = $this-&gt;token;
        
         $tmpArr = array($token, $timestamp, $nonce);//组成新数组
         sort($tmpArr, SORT_STRING);//重新排序
         $tmpStr =implode('', $tmpArr );//转换成字符串
         $tmpStr = sha1( $tmpStr );  //再将字符串进行加密
         
 
         if( $tmpStr == $signature ){
 
             echo  $echostr;
         }else{
             return 'false';
             
         }
     }
    
    
/*
*对传来的消息，进行分类处理，自动回复
*/
public  function  receive(){
  //  $obj=$GLOBALS['HTTP_RAW_POST_DATA'];
  $obj=file_get_contents("php://input");    //代替上面那句
    //simplexml_load_string xml转php 对象  SimpleXMLElement 收到的xml转成类后的名字，LIBXML_NOCDATA 忽略cdata 使文本正常显示
     $postSql = simplexml_load_string($obj,'SimpleXMLElement',LIBXML_NOCDATA);
  
    //存入日志
    $this-&gt;logger("\n接收：\n".$obj."\n");
  // $this-&gt;logger("接受：\n".$postSql);
  if(!empty($postSql)){
    //  MsgType 来自 微信传来的对象名
    switch(trim($postSql-&gt;MsgType)){
        case "text" :
        //根据预设关键字 查询出应该回复的文本消息
        $result=$this-&gt;receiveText($postSql);
        if(!empty($result)){
            //如果 根据预设关键字 查询出了回复的文本消息，则打印
            echo $result;
        }else{
            // 如果没有预设的关键字回复，则统一回复“没有这条文本消息”
                $xml="&lt;xml&gt;
                &lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
                &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
                &lt;CreateTime&gt;%s&lt;/CreateTime&gt;
                &lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;
                &lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
              &lt;/xml&gt;";
       
        //sprintf 可以按顺序替换上面%s代表的xml  $postSql-&gt;FromUserName 寄件人 变成了  ToUserName 收件人 所以下面的顺序是 xml类型 收件人 寄件人 时间 文本类型 文本内容
        echo $result=sprintf($xml,$postSql-&gt;FromUserName,$postSql-&gt;ToUserName,time(),$postSql-&gt;MsgType,"您的提问不含关键字 无法回答，您可以用“你好”提问。机器人会回复“hello”");
        }
        //上面 第二层 if 结束
    }
    //上面整个switch 结束
}
//上面整个if 结束
}


private function receiveText($postSql){
    $content=trim($postSql-&gt;Content);

//strstr： $content里 是否含有 “你好”这两个字
    if(strstr($content,"你好")){
        $xml="&lt;xml&gt;
                &lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
                &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
                &lt;CreateTime&gt;%s&lt;/CreateTime&gt;
                &lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;
                &lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
              &lt;/xml&gt;";
      
        //sprintf 可以按顺序替换上面%s代表的xml  $postSql-&gt;FromUserName 寄件人 变成了  ToUserName 收件人 所以下面的顺序是 xml类型 收件人 寄件人 时间 文本类型 文本内容
        $result=sprintf($xml,$postSql-&gt;FromUserName,$postSql-&gt;ToUserName,time(),$postSql-&gt;MsgType,"hello");

    }
	// <b>据关键词 回复单图文消息</b>
    else if(strstr($content,"单图文")){
        $result=$this-&gt;receiveImage($postSql);
    }

    $this-&gt;logger("发送单图文消息：\n".$result);


    return $result;


}
/*
*<b>回复单图文消息<b/>;
*/
private function receiveImage($postSql){

    $xml="&lt;xml&gt;
        &lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
        &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
        &lt;CreateTime&gt;%s&lt;/CreateTime&gt;
        &lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;
        &lt;ArticleCount&gt;1&lt;/ArticleCount&gt;
        &lt;Articles&gt;
        &lt;item&gt;
        &lt;Title&gt;&lt;![CDATA[%s]]&gt;&lt;/Title&gt;         // 标题
        &lt;Description&gt;&lt;![CDATA[%s]]&gt;&lt;/Description&gt;
        &lt;PicUrl&gt;&lt;![CDATA[%s]]&gt;&lt;/PicUrl&gt;        //图片地址
        &lt;Url&gt;&lt;![CDATA[%s]]&gt;&lt;/Url&gt;              //连接地址
        &lt;/item&gt;
        &lt;/Articles&gt;
        &lt;/xml&gt; ";

        $result=sprintf($xml,$postSql-&gt;FromUserName,$postSql-&gt;ToUserName,time(),"news","跟益达学微信开发，教益达泡妹子","它就是
中国海南海花岛——缤纷水上乐园
23项游乐
打造雪山滑道区、激流河道区
巨浪演绎区、阖家欢乐区
极限滑道区五大主题游乐区","http://www.bjlya.com/static/index/img/3.jpg","http://www.bjlya.com/");

                return $result;



}



/*
*把接受到的消息存入 日志 ，如果日志大于100000 则删除一次日志
*/

private function logger($content){
    $logSize=100000;

    $log="../note/wx/log.txt";

    if(file_exists($log) && filesize($log)  &gt; $logSize){
        unlink($log);
    }

    file_put_contents($log,date('H:i:s')." ".$content."\n",FILE_APPEND);

}
  

</pre>

	<!--公共js区-->
	<script src="__ROOT__/static/js/jquery.min.js"></script>
	<script src="__ROOT__/static/js/bootstrap.min.js"></script>
</body>

</html>